package com.example.springvue.common.returnthrow;

import lombok.Getter;
import lombok.ToString;

@Getter
@ToString
public class Result<T> {
    /** 业务错误码 */
    private Integer code;
    /** 信息描述 */
    private String message;
    /** 返回参数 */
    private T data;

    private Result(ResultStatus resultStatus,String msg, T data) {
        this.code = resultStatus.getCode();
        this.message = msg;
        this.data = data;
    }

    /** 业务成功返回业务代码和描述信息 */
    public static Result<Void> success() {
        return new Result<Void>(ResultStatus.SUCCESS, null,null);
    }

    /** 业务成功返回业务代码,描述和返回的参数 */
    public static <T> Result<T> success(String msg,T data) {
        return new Result<T>(ResultStatus.SUCCESS,msg,data);
    }

    /** 业务成功返回业务代码,描述和返回的参数 */
    public static <T> Result<T> success(ResultStatus resultStatus,String msg, T data) {
        if (resultStatus == null) {
            return success(msg,data);
        }
        return new Result<T>(resultStatus, msg,data);
    }

    /** 业务异常返回业务代码和描述信息 */
    public static <T> Result<T> failure() {
        return new Result<T>(ResultStatus.INTERNAL_SERVER_ERROR, null,null);
    }

    /** 业务异常返回业务代码,描述和返回的参数 */
    public static <T> Result<T> failure(String msg,ResultStatus resultStatus) {
        return failure(resultStatus, msg,null);
    }
    /** 业务异常返回业务代码,描述和返回的参数 */
    public static <T> Result<T> failure(String msg) {
        return failure(ResultStatus.CREATED, msg,null);
    }

    /** 业务异常返回业务代码,描述和返回的参数 */
    public static <T> Result<T> failure(ResultStatus resultStatus,String msg, T data) {
        if (resultStatus == null) {
            return new Result<T>(ResultStatus.INTERNAL_SERVER_ERROR, msg,data);
        }
        return new Result<T>(resultStatus,msg, data);
    }
}



